//1. 此文件作为Generator的核心入口
//2. 需要导出一个继承自yeoman generator的类型
//3. yeoman generator在工作时会自动调用我们在此类型中定义的一些生命周期方法
//4. 我们在这些方法中可以通过调用父类提供的一些工具方法实现一些功能，例如文件写入

const Generator = require('yeoman-generator');//载入yeoman-generator

module.exports = class extends Generator {//导出一个类型，让这个类型继承Generator
    prompting() {
        //1.yeoman 在询问用户环节会自定调用此方法
        //2.在此方法中可以调用父类的prompt()方法发出对用户的命令行询问
        //3.该方法返回的是一个promise对象
        return this.prompt([
            {
                type: 'input',
                name: 'name',
                message: 'Your project name',
                default: this.appname//appname 为项目生成目录名称
            }
        ])
            .then(answers => {
                //answers => {name:'user input value'}
                this.answers = answers;
            });
    }

    wirting() {

        // 1. 写入文件到项目目录 - 通过fs.write
        // this.fs.write(
        //     //1. yeoman 自动在生成文件阶段调用此方法
        //     //2. 我们这里尝试往项目目录中写入文件
        //     this.destinationPath('temp.txt'),//写入文件的绝对路径
        //     Math.random().toString(),//写入文件的内容：暂时用随机数冒充
        // )

        //2. 写入文件到项目目录 - 通过模板引擎s.copyTpl
        const tmpl = this.templatePath('bar.html');//模板文件的路径
        const output = this.destinationPath('bar.html');//文件输出路径
        //模板数据上下文
        const context = this.answers;
        //fs.copyTpl这个方法会自动将我们的模板文件映射到生成的输出文件上
        this.fs.copyTpl(tmpl, output, context);
    }
}